﻿Imports PTIC_GestionBDD
Imports PTIC_Util
Imports Actuariat
Imports OMANE.Modules.TauxGarantis.moteurTauxGaranti1
Imports OMANE.Modules.TauxGarantis.moteurTauxGaranti2
Imports OMANE.Common.Model.Interfaces
Imports OMANE.Common.Model.Parametrage

''' <summary>
''' Cette classe est observatrice de la collection de paramètres de l'étude
''' Liste des traitements OMANE
''' </summary>
''' <remarks></remarks>
Public Class ListeTraitementsTxGar
    Implements IDictionary(Of String, ITraitement)
    Implements IListeTraitements
    Implements IListeTraitementsTxGar

    Private m_ListeTraitements As PTIC_GestionBDD.ListeTraitementsBase(Of String)
    Private m_ListeParametres As ParametresList
    Private m_Referentiel As IReferentielOMANE


    ''' <summary>
    ''' Constructeur
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New(ByVal ListeTraitementOMANE As PTIC_GestionBDD.ListeTraitementsBase(Of String),
                   ByVal ListeParametres As ParametresList, _
                   ByVal Referentiel As IReferentielOMANE)
        m_ListeTraitements = ListeTraitementOMANE
        m_Referentiel = Referentiel
        m_ListeParametres = ListeParametres
        m_TypeCode = TauxGarantis.TypeCode.VBNET
    End Sub

    Private m_TablesBCAC As Boolean
    Public Property TablesBCAC As Boolean Implements IListeTraitementsTxGar.TablesBCAC
        Get
            Return m_TablesBCAC
        End Get
        Set(value As Boolean)
            If value <> m_TablesBCAC Then
                m_TablesBCAC = value
                'Lorsque TablesBCAC = True alors TypeCode doit être égal à SAS
                If TablesBCAC = True Then TypeCode = TauxGarantis.TypeCode.SAS Else TypeCode = TauxGarantis.TypeCode.VBNET
                'Générer un évènement lorsque cette propriété est modifiée
                RaiseEvent TablesBCACChanged(Me, Nothing)
            End If
        End Set
    End Property
    Public Event TablesBCACChanged As PropertyChangeEventHandler(Of Boolean) Implements IListeTraitementsTxGar.TablesBCACChanged

    Private m_TypeCode As TauxGarantis.TypeCode
    Public Property TypeCode As TypeCode Implements IListeTraitementsTxGar.TypeCode
        Get
            Return m_TypeCode
        End Get
        Set(value As TypeCode)
            If value <> m_TypeCode Then
                m_TypeCode = value
                'Le type de code et la variable TablesBCAC sont liés.
                'Intégrer les changements liés à une modification du langage du code
                'Générer un évènement pour prévenir que la propriété a changé

                Dim moteurMethode1 As IIntegMoteur_MethodeEqTarif

                If TypeCode = TauxGarantis.TypeCode.VBNET Then
                    '''' --- Version du Moteur 1 en production actuellement. Du VB.NET intégral avec liaison des paramètres dans la procédure de calcul
                    moteurMethode1 = New Moteur_Methode1(PTIC_Util.nomTraitMoteurMethode1,
                                                              m_ListeParametres,
                                                              TraitEntreeModelesTxGar,
                                                              Me.DataSet,
                                                              m_Referentiel)
                Else
                    moteurMethode1 = New IntegMoteur_MethodeEqTarif_VSAS(PTIC_Util.nomTraitMoteurMethode1,
                                                              TraitEntreeModeleTxGar1,
                                                              Me.DataSet,
                                                              m_Referentiel,
                                                              Me.Connection)
                End If

                'Invalider le scénario central
                Me.TraitMoteurMethode1.ScenarioCentral.Invalider()

                'Retirer les handlers
                RaiseEvent MoteurMethodeEqTarifBeforeChanged(Me, Nothing)
                Me.Item(nomTraitMoteurMethode1) = moteurMethode1

                'Remettre les handlers
                RaiseEvent MoteurMethodeEqTarifChanged(Me, Nothing)
                ''RaiseEvent TypeCodeChanged(Me, Nothing)

            End If
        End Set
    End Property
    Public Event TypeCodeChanged As PropertyChangeEventHandler(Of TypeCode) Implements IListeTraitementsTxGar.TypeCodeChanged
    Public Event MoteurMethodeEqTarifBeforeChanged As PropertyChangeEventHandler(Of IIntegMoteur_MethodeEqTarif) Implements IListeTraitementsTxGar.MoteurMethodeEqTarifBeforeChanged
    Public Event MoteurMethodeEqTarifChanged As PropertyChangeEventHandler(Of IIntegMoteur_MethodeEqTarif) Implements IListeTraitementsTxGar.MoteurMethodeEqTarifChanged

#Region "Propriétés d'accès aux traitements - Univers fortement typé"

#Region "Tranches d'âges"
    Public ReadOnly Property TraitTbleTrAge As tableBDD Implements IListeTraitementsTxGar.TraitTbleTrAges
        Get
            If Not ContainsKey(nomTraitTbleTrAge) Then
                creeTraitTbleTrAges()
            End If
            Dim result As tableBDD = Item(nomTraitTbleTrAge)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitTbleTrAgeGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleTrAgeGet As PropertyGetEventHandler(Of tableBDD)
    Protected Function creeTraitTbleTrAges() As Boolean Implements IListeTraitementsTxGar.creeTraitTbleTrAges
        Dim result As Boolean = False
        Try
            Dim tableBDDTrAges As tableBDD = New TableBDD_SAS(PTIC_Util.nomTraitTbleTrAge, csteLibSASreferentiel)
            Me.Add(tableBDDTrAges.nom, tableBDDTrAges)

            'Récupération de la table par défaut dans la liste des tables du référentiel
            Dim req = From InfoTable In m_Referentiel.InfoTables
                      Where InfoTable.TypeTable = "TRANCHE_AGE" And InfoTable.NomTable = "(Défaut)"
                      Select InfoTable.NomFichier
            'Paramétrage du traitement d'intégration des tranches d'âge avec la table par défaut
            tableBDDTrAges.FichierBDD.NomComplet = csteEmplacementReferentiel & req.AsEnumerable(0)
            result = True
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Tranches de capitaux"
    ''' <summary>
    ''' Traitement d'extraction des tranches de capitaux
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property TraitTbleTrCapi As tableBDD Implements IListeTraitementsTxGar.TraitTbleTrCapi
        Get
            If Not ContainsKey(nomTraitTbleTrCapi) Then
                creeTraitTbleTrCapi()
            End If
            Dim result As tableBDD = Item(nomTraitTbleTrCapi)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitTbleTrCapiGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleTrCapiGet As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Tranches de capitaux
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleTrCapi() As Boolean Implements IListeTraitementsTxGar.creeTraitTbleTrCapi
        Dim result As Boolean = True
        Try
            'L'ajout dans la liste de traitement est automatique car l'univers est passé en paramètre
            Dim tableBDDTrCapi As tableBDD = New TableBDD_SAS(PTIC_Util.nomTraitTbleTrCapi, csteLibSASreferentiel)
            Add(tableBDDTrCapi.nom, tableBDDTrCapi)
            'Récupération de la table par défaut dans la liste des tables du référentiel
            Dim req = From InfoTable In m_Referentiel.InfoTables
                      Where InfoTable.TypeTable = "TRANCHE_CAPINI" And InfoTable.NomTable = "(Défaut)"
                      Select InfoTable.NomFichier
            'Paramétrage du traitement d'intégration des tranches d'âge avec la table par défaut
            tableBDDTrCapi.FichierBDD.NomComplet = csteEmplacementReferentiel & req.AsEnumerable(0)
            result = True
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Table d'encours"
    Public ReadOnly Property TraitTbleEncours As tableBDD Implements IListeTraitementsTxGar.TraitTbleEncours
        Get
            If Not ContainsKey(nomTraitTbleEncours) Then
                creeTraitTbleEncours()
            End If
            Dim result As tableBDD = Item(nomTraitTbleEncours)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitTbleEncoursGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleEncoursGet As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Intégration de la table d'encours
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleEncours() As Boolean Implements IListeTraitementsTxGar.creeTraitTbleEncours
        Dim result As Boolean = True
        Try
            'Initialiseur (création du mapping en sortie de la table d'encours)
            Dim initialiseurTableBDD As New initialiseurTableBDDEncours(csteEmplacementParametrage & "lstMappingEncours.xml")
            Add(PTIC_Util.nomTraitTbleEncours, New TableBDD_SAS(PTIC_Util.nomTraitTbleEncours, _
                csteLibSASEncours, initialiseurTableBDD, ))
        Catch ex As Exception
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Table de mortalité des hommes"
    Public ReadOnly Property TraitTbleMortH As tableBDD Implements IListeTraitementsTxGar.TraitTbleMortH
        Get
            If Not ContainsKey(nomTraitTbleMortH) Then
                creeTraitTbleMortH()
            End If
            Dim result As tableBDD = Item(nomTraitTbleMortH)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitTbleMortHGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleMortHGet As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Table de mortalité des hommes
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleMortH() As Boolean Implements IListeTraitementsTxGar.creeTraitTbleMortH
        Dim result As Boolean = True
        Try
            'Initialiseur (création du mapping en sortie de la table d'encours)
            Dim initialiseur As New initialiseurTableTauxMortalite()
            'L'ajout dans la collection est automatique car l'univers est passé en paramètre
            Dim table_BDD_MortH As tableBDD = New TableBDD_SAS(PTIC_Util.nomTraitTbleMortH, _
                                                               csteLibSASreferentiel, _
                                                               initialiseur, _
                                                               Nothing)
            Me.Add(nomTraitTbleMortH, table_BDD_MortH)
            table_BDD_MortH.FichierBDD.NomComplet = csteEmplacementReferentiel & m_ListeParametres.Table_Mortalite_H.ValeurUnique
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Table de mortalité Femmes"
    Public ReadOnly Property TraitTbleMortF As tableBDD Implements IListeTraitementsTxGar.TraitTbleMortF
        Get
            If Not ContainsKey(nomTraitTbleMortF) Then
                creeTraitTbleMortF()
            End If
            Dim result As tableBDD = Item(nomTraitTbleMortF)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitTbleMortFGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleMortFGet As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Table de mortalité des femmes
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleMortF() As Boolean Implements IListeTraitementsTxGar.creeTraitTbleMortF
        Dim result As Boolean = True
        Try
            'Initialiseur (création du mapping en sortie de la table d'encours)
            Dim initialiseur As New initialiseurTableTauxMortalite()
            'L'ajout dans la collection est automatique car l'univers est passé en paramètre
            Dim table_BDD_MortF As tableBDD = New TableBDD_SAS(PTIC_Util.nomTraitTbleMortF, _
                                                               csteLibSASreferentiel, _
                                                               initialiseur, _
                                                               Nothing)
            Add(nomTraitTbleMortF, table_BDD_MortF)
            table_BDD_MortF.FichierBDD.NomComplet = csteEmplacementReferentiel & m_ListeParametres.Table_Mortalite_F.ValeurUnique
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Grille tarifaire"
    Public ReadOnly Property TraitGrilleTarifaire As tableBDD Implements IListeTraitementsTxGar.TraitGrilleTarifaire
        Get
            If Not ContainsKey(nomTraitGrilleTarifaire) Then
                creeTraitGrilleTarifaire()
            End If
            Dim result As tableBDD = Item(nomTraitGrilleTarifaire)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitGrilleTarifaireGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitGrilleTarifaireGet As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Grille tarifaire
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitGrilleTarifaire() As Boolean Implements IListeTraitementsTxGar.creeTraitGrilleTarifaire
        Dim result As Boolean = True
        Try
            'Initialiseur (création du mapping en sortie de la table d'encours)
            Dim initialiseur As New initialiseurTableGrilleTarifaire()
            'L'ajout dans la collection est automatique car l'univers est passé en paramètre
            Dim table_BDD_tarif As tableBDD = New TableBDD_SAS(PTIC_Util.nomTraitGrilleTarifaire, _
                                                               csteLibSASreferentiel, _
                                                               initialiseur, _
                                                               Nothing)
            Me.Add(PTIC_Util.nomTraitGrilleTarifaire, table_BDD_tarif)
            table_BDD_tarif.FichierBDD.NomComplet = csteEmplacementReferentiel & m_ListeParametres.GrilleTarifaire.ValeurUnique
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Maintien en INCAP/INVAL méthode 2 de calcul du taux garanti"
    Public ReadOnly Property TraitMaintienINCINVM2 As tableBDD Implements IListeTraitementsTxGar.TraitMaintienINCINVM2
        Get
            If Not ContainsKey(nomTraitTbleMaintienINCINV_M2) Then
                creeTraitMaintienINCINVM2()
            End If
            Dim result As tableBDD = Item(nomTraitTbleMaintienINCINV_M2)
            Dim e As New PropertyGetEventArgs(Of tableBDD)(result, result)
            RaiseEvent TraitMaintienINCINVM2Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitMaintienINCINVM2Get As PropertyGetEventHandler(Of tableBDD)
    ''' <summary>
    ''' Maintien en INCAP/INVAL méthode 2 de calcul du taux garanti
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitMaintienINCINVM2() As Boolean Implements IListeTraitementsTxGar.creeTraitMaintienINCINVM2
        Dim result As Boolean = True
        Try
            'Initialiseur (création du mapping en sortie de la table d'encours)
            Dim initialiseur As New initialiseurTableBDDdefaut()
            'L'ajout dans la collection est automatique car l'univers est passé en paramètre
            Dim table_BDD_INCINV_M2 As tableBDD = New TableBDD_SAS( _
                                                               PTIC_Util.nomTraitTbleMaintienINCINV_M2, _
                                                               csteLibSASreferentiel, _
                                                               initialiseur, _
                                                               Nothing)
            Me.Add(nomTraitTbleMaintienINCINV_M2, table_BDD_INCINV_M2)
            table_BDD_INCINV_M2.FichierBDD.NomComplet = csteEmplacementReferentiel & m_ListeParametres.Tble_maintienINCINVM2.ValeurUnique
        Catch ex As Exception
            MsgBox(ex.Message)
            result = False
        End Try
        Return result
    End Function
#End Region

#Region "Sommes des capitaux initiaux - Source : TraitTbleEncoursPrep1"
    Public ReadOnly Property TraitSumCapIni As RequeteBDD Implements IListeTraitementsTxGar.TraitSumCapIni
        Get
            If Not ContainsKey(nomTraitReqSumCapIni) Then
                creeTraitSumCapIni()
            End If
            Dim result As RequeteBDD = Item(nomTraitReqSumCapIni)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitSumCapIniGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitSumCapIniGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : TbleEncours
    ''' Ajouts : Somme des capitaux initiaux
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitSumCapIni() As Boolean Implements IListeTraitementsTxGar.creeTraitSumCapIni
        Dim result As Boolean = True
        'Récupération de la requête de prétraitement de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim traitTbleEncours As RequeteBDD = Me.TraitTbleEncoursPrep1()

        'Création du traitement de préparation de la table d'encours
        Dim reqTraitSumCapIni As New RequeteBDD( _
                nomTraitReqSumCapIni, _
                New Cla_NomFichier(csteEmplacementCalculsInt & nomTraitReqSumCapIni & ".sas7bdat"), _
                csteLibSASCalculsInt, Nothing)
        'Intégration de la requête à l'univers
        Add(reqTraitSumCapIni.nom, reqTraitSumCapIni)

        'Ajout des traitements constitutifs
        reqTraitSumCapIni.addTraitementConstitutif(traitTbleEncours)

        'Définition de la requête
        reqTraitSumCapIni.isDISTINCT = False
        With traitTbleEncours
            reqTraitSumCapIni.addSELECTsum(.nom, descCapIni, nomSumCapIni, descSumCapIni, "#,###")
        End With
        Return result

    End Function
#End Region

#Region "Nombre de prêts X assurés - Source : TraitTbleEncoursPrep1"
    Public ReadOnly Property TraitReqNbPretsXassu As RequeteBDD Implements IListeTraitementsTxGar.TraitReqNbPretsXassu
        Get
            If Not ContainsKey(nomTraitReqNbPretsXassu) Then
                creeTraitReqNbPretsXassu()
            End If
            Dim result As RequeteBDD = Item(nomTraitReqNbPretsXassu)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitReqNbPretsXassuGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitReqNbPretsXassuGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : TbleEncours
    ''' Ajouts : Somme des nombres de prêts X assurés
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitReqNbPretsXassu() As Boolean Implements IListeTraitementsTxGar.creeTraitNbPretsXassu
        Dim result As Boolean = True
        'Récupération de la requête de prétraitement de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim traitTbleEncours As RequeteBDD = Me.TraitTbleEncoursPrep1()

        'Création du traitement de préparation de la table d'encours
        Dim reqTraitNbPretsXassu As New RequeteBDD( _
                nomTraitReqNbPretsXassu, _
                New Cla_NomFichier(csteEmplacementCalculsInt & nomTraitReqNbPretsXassu & ".sas7bdat"), _
                csteLibSASCalculsInt, Nothing)
        'reqTraitNbPretsXassu.univers = _universOMANE
        'Intégration de la requête à l'univers
        Add(reqTraitNbPretsXassu.nom, reqTraitNbPretsXassu)

        'Ajout des traitements constitutifs
        reqTraitNbPretsXassu.addTraitementConstitutif(traitTbleEncours)

        'Définition de la requête
        reqTraitNbPretsXassu.isDISTINCT = False
        With traitTbleEncours
            reqTraitNbPretsXassu.addSELECTcalculee( _
                New String() {.nom}, _
                New String() {descIdReseau}, _
                "count({1})", _
                nomNbPretsXassu, _
                descNbPretsXassu)
        End With
        Return result

    End Function
#End Region

#Region "Etape 1 préparation table d'encours - Source : TbleEncours"
    Public ReadOnly Property TraitTbleEncoursPrep1 As RequeteBDD Implements IListeTraitementsTxGar.TraitTbleEncoursPrep1
        Get
            If Not ContainsKey(nomTraitTbleEncoursPrep1) Then
                creeTraitTbleEncoursPrep1()
            End If
            Dim result As RequeteBDD = Item(nomTraitTbleEncoursPrep1)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitTbleEncoursPrep1Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleEncoursPrep1Get As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : TbleEncours
    ''' Ajouts : trAges, trCapitaux, Ages exacts et entiers
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleEncoursPrep1() As Boolean Implements IListeTraitementsTxGar.creeTraitPrepareEncours1

        Dim tbleEncours As tableBDD = Me.TraitTbleEncours

        'Récupération des traitements sur les tranches d'âge et de capitaux et intégration
        'pour le calcul du taux garanti
        'Création du traitement
        Dim reqPrepTbleEncours1 As New RequeteBDD(PTIC_Util.nomTraitTbleEncoursPrep1, _
                                                  New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqPrepTbleEncours1.sas7bdat"), _
                                                  csteLibSASCalculsInt, Nothing)
        'reqPrepTbleEncours1.univers = _universOMANE
        Add(reqPrepTbleEncours1.nom, reqPrepTbleEncours1)

        'Intégration de la table d'encours comme traitement constitutif
        reqPrepTbleEncours1.addTraitementConstitutif(tbleEncours)
        reqPrepTbleEncours1.isDISTINCT = False
        For Each corresp As Correspondance In tbleEncours.ListeChampsSortie.Values
            Dim correspPrepEnc As Correspondance = reqPrepTbleEncours1.addSELECT(tbleEncours.nom, corresp.description)
        Next

        'Si la table de correspondance des tranches n'existe pas, alors on la crée
        'Récupérer le traitement qui s'occupe d'importer la table des tranches d'âge
        TraitTbleTrAge.Calculer_DataTable()
        TraitTbleTrCapi.Calculer_DataTable()

        'Ajout des tranches d'âge
        Dim correspTrAge As ChampsTraitTranche = _
            reqPrepTbleEncours1.addSELECTtranche(desctrAge, _
                                                 nomtrAge, _
                                                 TraitTbleTrAge, _
                                                 "minTrAge", _
                                                 "maxTrAge", _
                                                 "trAge", _
                                                 "({2}-{1})/365.25")
        correspTrAge.addCorrespFormule(tbleEncours.ListeChampsSortie.Item(descDateNaiss))
        correspTrAge.addCorrespFormule(tbleEncours.ListeChampsSortie.Item(descDateDebloFonds))
        reqPrepTbleEncours1.addDependance(tbleEncours.ListeChampsSortie.Item(descDateNaiss))
        reqPrepTbleEncours1.addDependance(tbleEncours.ListeChampsSortie.Item(descDateDebloFonds))
        reqPrepTbleEncours1.addDependance(correspTrAge)

        'Ajout des tranches de capitaux
        Dim correspTrCapi As ChampsTraitTranche = _
        reqPrepTbleEncours1.addSELECTtranche("Tranche de capitaux", _
                                             "trCapi", _
                                             TraitTbleTrCapi, _
                                             "minTrCapi", _
                                             "maxTrCapi", _
                                             "trCapi")
        correspTrCapi.addCorrespFormule(tbleEncours.ListeChampsSortie.Item(descCapIni))
        reqPrepTbleEncours1.addDependance(tbleEncours.ListeChampsSortie.Item(descCapIni))
        reqPrepTbleEncours1.addDependance(correspTrCapi)

        Dim correspAge As Correspondance = reqPrepTbleEncours1.addSELECTage(tbleEncours.nom, _
                                                tbleEncours.nom, _
                                                descDateDebloFonds, _
                                                descDateNaiss, _
                                                nomAgeSousAnExact, _
                                                descAgeSousAnExact)

        'Ajout d'une correspondance calculée pour l'age entier de l'assuré
        Dim TabNomTraitementsSource(1) As String
        TabNomTraitementsSource(0) = tbleEncours.nom
        TabNomTraitementsSource(1) = tbleEncours.nom

        Dim tabDescrCorrespSource(1) As String
        tabDescrCorrespSource(0) = descDateNaiss
        tabDescrCorrespSource(1) = descDateDebloFonds

        Dim formuleCalcul As String = "INT(({2}-{1})/365.25)"
        Dim nomChResultat = nomAgeSousAnEntier
        Dim descrChResultat As String = descAgeSousAnEntier

        Dim correspAgeEntier As Correspondance = reqPrepTbleEncours1.addSELECTcalculee(TabNomTraitementsSource, _
                                          tabDescrCorrespSource, _
                                          formuleCalcul, _
                                          nomChResultat, _
                                          descrChResultat)

        reqPrepTbleEncours1.addWHERE("testAgeMin", correspAgeEntier, operateurFiltreBDD.SuperieurOuEgal, "18")
        reqPrepTbleEncours1.addWHERE("testAgeMax", correspAgeEntier, operateurFiltreBDD.InferieurOuEgal, "65")
        Return True
    End Function
#End Region

#Region "Etape 2 Préparation de la table d'encours - Source : prepareEncours1"
    Public ReadOnly Property TraitTbleEncoursPrep2 As RequeteBDD Implements IListeTraitementsTxGar.TraitTbleEncoursPrep2
        Get
            If Not ContainsKey(nomTraitTbleEncoursPrep2) Then
                creeTraitTbleEncoursPrep2()
            End If
            Dim result As RequeteBDD = Item(nomTraitTbleEncoursPrep2)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitTbleEncoursPrep2Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleEncoursPrep2Get As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : prepareEncours1
    ''' Ajouts : taux de mortalité
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleEncoursPrep2() As Boolean Implements IListeTraitementsTxGar.creeTraitPrepareEncours2

        'Récupération des traitements source
        Dim tbleEncoursPrep1 As RequeteBDD = Me.TraitTbleEncoursPrep1
        Dim tbleMortH As tableBDD = Me.TraitTbleMortH
        Dim tbleMortF As tableBDD = Me.TraitTbleMortF

        'Création du traitement de préparation de la table d'encours
        Dim reqPrepTbleEncours2 As New RequeteBDD("traitReqPrepTbleEncours2", _
                                  New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqPrepTbleEncours2.sas7bdat"), _
                                  csteLibSASCalculsInt, Nothing)
        'reqPrepTbleEncours2.univers = _universOMANE
        Add(reqPrepTbleEncours2.nom, reqPrepTbleEncours2)
        reqPrepTbleEncours2.addTraitementConstitutif(tbleEncoursPrep1)
        reqPrepTbleEncours2.addTraitementConstitutif(tbleMortH)
        reqPrepTbleEncours2.addTraitementConstitutif(tbleMortF)
        reqPrepTbleEncours2.isDISTINCT = False

        'Ajout des correspondances du prétraitement 1 de la base d'encours
        For Each corresp As Correspondance In tbleEncoursPrep1.ListeChampsSortie.Values
            If corresp.description <> descTxMortAn Then
                Dim correspPrepEnc As Correspondance = reqPrepTbleEncours2.addSELECT(tbleEncoursPrep1.nom, corresp.description)
            End If
        Next

        'Liaison avec la table de mortalité retenue pour les hommes
        Dim nomChjoint1PrepEncours As New List(Of String)
        nomChjoint1PrepEncours.Add(descAgeSousAnEntier)
        Dim nomChJoint1TbleMortH As New List(Of String)
        nomChJoint1TbleMortH.Add(descAgeAnEntier)
        reqPrepTbleEncours2.addJointure(tbleEncoursPrep1.nom, _
                                        nomChjoint1PrepEncours, _
                                        tbleMortH.nom, _
                                        nomChJoint1TbleMortH, _
                                        typeJointure.GAUCHE)

        'Liaison avec la table de mortalité retenue pour les femmes
        Dim nomChjoint2PrepEncours As New List(Of String)
        nomChjoint2PrepEncours.Add(descAgeSousAnEntier)
        Dim nomChJoint2TbleMortF As New List(Of String)
        nomChJoint2TbleMortF.Add(descAgeAnEntier)

        reqPrepTbleEncours2.addJointure(tbleEncoursPrep1.nom, _
                                        nomChjoint2PrepEncours, _
                                        tbleMortF.nom, _
                                        nomChJoint2TbleMortF, _
                                        typeJointure.GAUCHE)

        Dim nomTraitScesCalcule(1) As String
        Dim descrCorrespSces(1) As String
        Dim formuleCalcul As String = ""
        nomTraitScesCalcule(0) = tbleMortH.nom
        nomTraitScesCalcule(1) = tbleMortF.nom
        descrCorrespSces(0) = descTxMortAn
        descrCorrespSces(1) = descTxMortAn
        formuleCalcul = "CASE WHEN " & nomSexeAssu & "='H' THEN {1} ELSE {2} END"

        Dim correspAjoutee As Correspondance = reqPrepTbleEncours2.addSELECTcalculee(nomTraitScesCalcule, _
                                              descrCorrespSces, _
                                              formuleCalcul, _
                                              nomTxMortAn, _
                                              descTxMortAn)

        reqPrepTbleEncours2.addSELECT(tbleMortF.nom, _
                                      descTxMortAn, _
                                      nomTxMortAn & "F", _
                                      descTxMortAn & " des femmes")

        reqPrepTbleEncours2.addSELECT(tbleMortH.nom, _
                                      descTxMortAn, _
                                      nomTxMortAn & "H", _
                                      descTxMortAn & " des hommes")

        Return True
    End Function
#End Region

#Region "Etape 3 (traitTableTravail) Préparation de la table de travail - Source prepareEncours2"
    Public ReadOnly Property TraitTbleTravail As RequeteBDD Implements IListeTraitementsTxGar.TraitTbleTravail
        Get
            If Not ContainsKey(nomTraitTbleTravail) Then
                creeTraitTbleTravail()
            End If
            Dim result As RequeteBDD = Item(nomTraitTbleTravail)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitTbleTravailGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleTravailGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : prepareEncours2
    ''' Ajouts : Grille tarifaire
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks>Ce traitement effectue la jointure de la table résultant du 2ème prétraitement et
    ''' de la grille tarifaire retenue
    '''</remarks>
    Protected Function creeTraitTbleTravail() As Boolean Implements IListeTraitementsTxGar.creeTraitTableTravail

        'Récupération des traitements source
        'Initialisation du traitement de la grille tarifaire
        Dim tbleEncoursPrep2 As RequeteBDD = TraitTbleEncoursPrep2()
        Dim tbleGrilleTarifaire As tableBDD = TraitGrilleTarifaire()

        If Not tbleEncoursPrep2 Is Nothing Then

            'Création du traitement de préparation de la table d'encours
            Dim reqTableTravail As New RequeteBDD("traitTableTravail", _
                                      New Cla_NomFichier(csteEmplacementCalculsInt & "traitTableTravail.sas7bdat"), _
                                      csteLibSASCalculsInt, Nothing)
            'reqTableTravail.univers = _universOMANE
            Add(reqTableTravail.nom, reqTableTravail)
            reqTableTravail.addTraitementConstitutif(tbleEncoursPrep2)
            reqTableTravail.addTraitementConstitutif(tbleGrilleTarifaire)
            reqTableTravail.isDISTINCT = False

            'Ajout des correspondances du prétraitement 1 de la base d'encours
            For Each corresp As Correspondance In tbleEncoursPrep2.ListeChampsSortie.Values
                Dim correspPrepEnc As Correspondance = reqTableTravail.addSELECT(tbleEncoursPrep2.nom, corresp.description)
            Next

            'Ajout des champs de la grille tarifaire
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPComDC_Non_Derog)
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPComDC_Derog)
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPourDC_Derog)
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPComINCINV_Non_Derog)
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPComINCINV_Derog)
            reqTableTravail.addSELECT(tbleGrilleTarifaire.nom, descPourINCINV_Derog)

            init_JointureTableTravGrilleTarif()
        End If
        Return True
    End Function

    Friend Sub init_JointureTableTravGrilleTarif() Implements IListeTraitementsTxGar.init_JointureTableTravGrilleTarif
        'Liaison avec la grille tarifaire retenue (en faisant la liste des variables de segmentation
        'reconnues dans la table)
        'Identification des variables de segmentation de la table de la grille tarifaire
        'For Each correspTarif As Correspondance In tbleGrilleTarifaire.mapSortie.listeCorrespondances.Values
        Dim reqTableTravail As RequeteBDD = TraitTbleTravail
        Dim tbleGrilleTarifaire As tableBDD = TraitGrilleTarifaire
        Dim tbleEncoursPrep2 As RequeteBDD = TraitTbleEncoursPrep2

        For Each corresp As Correspondance In TraitTbleEncoursPrep2.ListeChampsSortie.Values
            If tbleGrilleTarifaire.ListeChampsSortie.ContainsKey(corresp.chOutil.Nom) Then
                tbleGrilleTarifaire.ListeChampsSortie.setDescription(corresp.chOutil.Nom, corresp.description)
            End If
        Next

        reqTableTravail.clearJointures()

        Dim nomChjointtbleEncoursPrep2 As New List(Of String)
        Dim nomChJointGrilleTarif As New List(Of String)
        For Each correspTarif As Correspondance In tbleGrilleTarifaire.ListeChampsSortie.Values
            If TraitTbleEncoursPrep2.ListeChampsSortie.ContainsKey(correspTarif.description) Then
                'Ajouter la variable aux jointures à gauche
                nomChjointtbleEncoursPrep2.Add(correspTarif.description)
                'Ajouter la variable aux jointures à droite
                nomChJointGrilleTarif.Add(correspTarif.description)
            End If
        Next

        reqTableTravail.addJointure(tbleEncoursPrep2.nom, _
                                    nomChjointtbleEncoursPrep2, _
                                    tbleGrilleTarifaire.nom, _
                                    nomChJointGrilleTarif, _
                                    typeJointure.GAUCHE)

        TraitTbleTravail.invalideAll()
    End Sub
#End Region

#Region "Etape 4 Préparation de la table de travail - Source : traitTableTravail"
    Public ReadOnly Property TraitEntreeModelesTxGar As RequeteBDD Implements IListeTraitementsTxGar.TraitEntreeModelesTxGar
        Get
            If Not ContainsKey(nomTraitEntreeModeleTxGar) Then
                creeTraitEntreeModelesTxGar()
            End If
            Dim result As RequeteBDD = Item(nomTraitEntreeModeleTxGar)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitEntreeModelesTxGarGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitEntreeModelesTxGarGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : traitTableTravail
    ''' Ajouts : regroupements selon les segments retenus pour l'étude
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitEntreeModelesTxGar() As Boolean Implements IListeTraitementsTxGar.creeTraitEntreeModelesTxGar

        'Il reste à l'agréger au niveau de détail retenu pour la segmentation
        Dim reqTbleTravail As RequeteBDD = TraitTbleTravail()

        Dim traitReqEntreeModelesTxGar As New RequeteBDD("traitReqEntreeModelesTxGar", _
            New Cla_NomFichier(csteEmplacementCalculsInt & "traitReqEntreeModelesTxGar.sas7bdat"), _
            csteLibSASCalculsInt, Nothing)

        Add(traitReqEntreeModelesTxGar.nom, traitReqEntreeModelesTxGar)
        traitReqEntreeModelesTxGar.addTraitementConstitutif(reqTbleTravail)

        traitReqEntreeModelesTxGar.isDISTINCT = False

        With reqTbleTravail
            traitReqEntreeModelesTxGar.addSELECTsum(.nom, descCapAssure, nomSumCSR, descSumCSR, "#,###")
            traitReqEntreeModelesTxGar.addSELECTsum(.nom, descCapIni, nomSumCapIni, descSumCapIni, "#,###")
            traitReqEntreeModelesTxGar.addSELECTcalculee( _
                                        New String() {.nom}, _
                                        New String() {descIdReseau}, _
                                        "count({1})", _
                                        nomNbPretsXassu, _
                                        descNbPretsXassu)
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPComDC_Non_Derog, _
                                        descCapAssure, nomPComDC_Non_Derog_Actu, _
                                        descPComDC_Non_Derog_Actu, "p")
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPComDC_Derog, _
                                        descCapAssure, nomPComDC_Derog_Actu, _
                                        descPComDC_Derog_Actu, "p")
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPourDC_Derog, _
                                        descCapAssure, nomPourDC_Derog_Actu, _
                                        descPourDC_Derog_Actu, "p")
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPComINCINV_Non_Derog, _
                                        descCapAssure, nomPComINCINV_Non_Derog_Actu, _
                                        descPComINCINV_Non_Derog_Actu, "p")
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPComINCINV_Derog, _
                                        descCapAssure, nomPComINCINV_Derog_Actu, _
                                        descPComINCINV_Derog_Actu, "p")
            traitReqEntreeModelesTxGar.addSELECTmoypond(.nom, .nom, descPourINCINV_Derog, _
                                        descCapAssure, nomPourINCINV_Derog_Actu, _
                                        descPourINCINV_Derog_Actu, "p")
        End With
        Return True
    End Function
#End Region

#Region "Etape 5 (pour le moteur de calcul SAS du taux garanti 1) - Version du moteur SAS"
    Public ReadOnly Property TraitEntreeModeleTxGar1 As TraitEntreeModeleTxGar1 Implements IListeTraitementsTxGar.TraitEntreeModeleTxGar1
        Get
            If Not ContainsKey(nomTraitEntreeModeleTxGar1) Then
                creeTraitEntreeModeleTxGar1()
            End If
            Dim result As TraitEntreeModeleTxGar1 = Item(nomTraitEntreeModeleTxGar1)
            Dim e As New PropertyGetEventArgs(Of TraitEntreeModeleTxGar1)(result, result)
            RaiseEvent TraitEntreeModeleTxGar1Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitEntreeModeleTxGar1Get As PropertyGetEventHandler(Of TraitEntreeModeleTxGar1)

    ''' <summary>
    ''' Source : TraitEntreeModelesTxGar.
    ''' Ajout : Ajout d'une colonne pour chaque paramètre utilisé dans le moteur 1 et, pour chaque segment, remplissage
    ''' de la valeur.
    ''' En sortie : Table des segments sous SAS avec, pour chacun d'eux, les paramètres à utiliser.
    ''' Remarque : prise en paramètre de IConnection (au lieu de OledbConnection) à cause de l'écriture de la table SAS
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function creeTraitEntreeModeleTxGar1() As Boolean Implements IListeTraitementsTxGar.creeTraitEntreeModeleTxGar1
        'Création du traitement personnalisé permettant de préparer la table en entrée du Moteur de calcul 1 du
        'taux garanti.

        'Définition du traitement source (auxquel on va ajouter les colonnes de paramètres)
        Dim ReqEntreeModelesTxGar As RequeteBDD = TraitEntreeModelesTxGar

        Dim TraitEntreeModeleTxGar1 As TraitEntreeModeleTxGar1
        TraitEntreeModeleTxGar1 = New TraitEntreeModeleTxGar1(nomTraitEntreeModeleTxGar1, _
                                                             m_ListeParametres, ReqEntreeModelesTxGar, Me.DataSet,
                                                             Me.Connection)

        Add(TraitEntreeModeleTxGar1.nom, TraitEntreeModeleTxGar1)

        Return True
    End Function
#End Region

#Region "Stats sur la table d'encours - Source prepareEncours1"
    Public ReadOnly Property TraitTbleEncoursStats As RequeteBDD Implements IListeTraitementsTxGar.TraitTbleEncoursStats
        Get
            If Not ContainsKey(nomTraitTbleEncoursStats) Then
                creeTraitTbleEncoursStats()
            End If
            Dim result As RequeteBDD = Item(nomTraitTbleEncoursStats)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitTbleEncoursStatsGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitTbleEncoursStatsGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : prepareEncours1
    ''' Ajouts : regoupements par type de prêt et tranches d'âge
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitTbleEncoursStats() As Boolean Implements IListeTraitementsTxGar.creeTraitStatsEncours

        'Récupération de la requête de prétraitement de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim tbleEncoursPrep1 As RequeteBDD = TraitTbleEncoursPrep1()

        'Création du traitement de préparation de la table d'encours
        Dim reqTbleEncoursStats As New RequeteBDD("traitReqTbleEncoursStats", _
            New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqTbleEncoursStats.sas7bdat"), _
            csteLibSASCalculsInt, Nothing)
        Add(reqTbleEncoursStats.nom, reqTbleEncoursStats)

        'Ajout des traitements constitutifs
        reqTbleEncoursStats.addTraitementConstitutif(tbleEncoursPrep1)

        'Définition de la requête
        reqTbleEncoursStats.isDISTINCT = False
        With tbleEncoursPrep1
            reqTbleEncoursStats.addSELECT(.nom, desctrAge)
            reqTbleEncoursStats.addSELECT(.nom, descIdTypePret)
            reqTbleEncoursStats.addSELECTsum(.nom, descCapAssure, nomSumCSR, descSumCSR, "#,###")
            reqTbleEncoursStats.addSELECTmoypond(.nom, _
                                                 .nom, _
                                                 descTauxNominal, _
                                                 descCapAssure, _
                                                 nomTxNom_Actu, _
                                                 descTxNom_Actu, _
                                                 "p")
            reqTbleEncoursStats.addSELECTmoypond(.nom, _
                                                 .nom, _
                                                 descDuree, _
                                                 descCapAssure, _
                                                 nomDuree_Actu, _
                                                 descDuree_Actu, _
                                                 "#,###")
            reqTbleEncoursStats.addGROUPBY(.nom, desctrAge)
            reqTbleEncoursStats.addGROUPBY(.nom, descIdTypePret)
            reqTbleEncoursStats.isDISTINCT = False
        End With
        Return True
    End Function
#End Region

#Region "Requête permettant d'extraire la segmentation - Source : prepareEncours1"
    Public ReadOnly Property TraitReqSegmentation As RequeteBDD Implements IListeTraitementsTxGar.TraitReqSegmentation
        Get
            If Not ContainsKey(nomTraitReqSegmentation) Then
                creeTraitReqSegmentation()
            End If
            Dim result As RequeteBDD = Item(nomTraitReqSegmentation)
            Dim e As New PropertyGetEventArgs(Of RequeteBDD)(result, result)
            RaiseEvent TraitReqSegmentationGet(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitReqSegmentationGet As PropertyGetEventHandler(Of RequeteBDD)
    ''' <summary>
    ''' Source : prepareEncours1
    ''' Ajouts : mis à jour directement par le contrôleur lorsque la segmentation est modifiée
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitReqSegmentation() As Boolean Implements IListeTraitementsTxGar.creeTraitSegmentation

        'Récupération de la requête de prétraitement de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim tbleEncoursPrep1 As RequeteBDD = TraitTbleEncoursPrep1()

        'Création du traitement de préparation de la table d'encours
        Dim reqSegmentation As New RequeteBDD("traitReqSegmentation", _
                                  New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqSegmentation.sas7bdat"), _
                                  csteLibSASCalculsInt, Nothing)
        Add(reqSegmentation.nom, reqSegmentation)

        'Ajout des traitements constitutifs
        reqSegmentation.addTraitementConstitutif(tbleEncoursPrep1)

        'reqSegmentation.addSELECT(tbleEncoursPrep1.nom, descIdOption)
        'reqSegmentation.addSELECT(tbleEncoursPrep1.nom, descSexeAssu)

        'Définition de la requête (pour déterminer la segmentation, on extrait sans doublons)
        reqSegmentation.isDISTINCT = True

        Return True
    End Function
#End Region

#Region "Requête permettant d'extraire la segmentation d'un paramètre (hors paramètres de sensibilité) - Source : prepareEncours1"
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Function TraitReqSegmentationParam(ByVal nomParam As String) As RequeteBDD Implements IListeTraitementsTxGar.TraitReqSegmentationParam
        If Not ContainsKey(PTIC_Util.nomTraitReqSegmentationParamGenerique & nomParam) Then
            creeTraitSegmentationParam(nomParam)
        End If
        Return Item(PTIC_Util.nomTraitReqSegmentationParamGenerique & nomParam)
    End Function

    ''' <summary>
    ''' Source : prepareEncours1
    ''' Ajouts : mis à jour directement par le paramètre concerné
    ''' </summary>
    ''' <param name="nomParam"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitSegmentationParam(ByVal nomParam As String) As Boolean Implements IListeTraitementsTxGar.creeTraitSegmentationParam
        'Récupération de la requête de prétraitement de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim tbleEncoursPrep1 As RequeteBDD = TraitTbleEncoursPrep1()

        'Création du traitement de préparation de la table d'encours
        Dim reqSegmentation As New RequeteBDD("traitReqSegmentationParam" & nomParam, _
                                  New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqSegmentation.sas7bdat"), _
                                  csteLibSASCalculsInt, Nothing)
        Add(reqSegmentation.nom, reqSegmentation)

        'Ajout des traitements constitutifs
        reqSegmentation.addTraitementConstitutif(tbleEncoursPrep1)

        'Définition de la requête (pour déterminer la segmentation, on extrait sans doublons)
        reqSegmentation.isDISTINCT = True
        AddHandler reqSegmentation.Invalidated, AddressOf onReqParametreHasBeenInvalidated
        Return True
    End Function
#End Region

#Region "Requête permettant d'extraire la segmentation d'un paramètre de sensibilité - Source : prepareEncours1"
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Function TraitReqSegmentationParamSens(ByVal nomParamSens As String) As RequeteBDD Implements IListeTraitementsTxGar.TraitReqSegmentationParamSens
        If Not ContainsKey(PTIC_Util.nomTraitReqSegmentationParamSensGenerique & nomParamSens) Then
            creeTraitSegmentationParamSens(nomParamSens)
        End If
        Return Item(PTIC_Util.nomTraitReqSegmentationParamSensGenerique & nomParamSens)
    End Function

    ''' <summary>
    ''' Source : prepareEncours1
    ''' Ajouts : mis à jour directement par le paramètre concerné
    ''' </summary>
    ''' <param name="nomParam"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitSegmentationParamSens(ByVal nomParam As String) As Boolean Implements IListeTraitementsTxGar.creeTraitSegmentationParamSens

        'Récupération de la requête de prétraitement 1 de la table d'encours (ajout des tranches d'âge et de capitaux)
        Dim tbleEncoursPrep1 As RequeteBDD = TraitTbleEncoursPrep1()
        'Récupération de la requête de prétraitement 2 de la table d'encours (ajout des taux de mortalité)
        Dim tbleEncoursPrep2 As RequeteBDD = TraitTbleEncoursPrep2()

        'Création du traitement de préparation de la table d'encours
        Dim reqSegmentationParamSens As New RequeteBDD("traitReqSegmentationParam" & nomParam, _
                                  New Cla_NomFichier(csteEmplacementCalculsInt & "tbleReqSegmentation.sas7bdat"), _
                                  csteLibSASCalculsInt, Nothing)
        Add(reqSegmentationParamSens.nom, reqSegmentationParamSens)

        'Ajout des traitements constitutifs
        If nomParam = nomTxMort_Actu Then
            reqSegmentationParamSens.addTraitementConstitutif(tbleEncoursPrep2)
        Else
            reqSegmentationParamSens.addTraitementConstitutif(tbleEncoursPrep1)
        End If
        'Définition de la requête (pour déterminer la segmentation, on extrait sans doublons)
        reqSegmentationParamSens.isDISTINCT = False

        'Ajout du champs calculé à la requête en fonction du paramètre 'nomParam'
        If nomParam = nomDuree_Actu Then
            With tbleEncoursPrep1
                reqSegmentationParamSens.addSELECTmoypond(.nom, _
                                                     .nom, _
                                                     descDuree, _
                                                     descCapAssure, _
                                                     nomDuree_Actu, _
                                                     descDuree_Actu, _
                                                     "#,###")
            End With
        End If
        If nomParam = nomTxNom_Actu Then
            With tbleEncoursPrep1
                reqSegmentationParamSens.addSELECTmoypond(.nom, _
                                         .nom, _
                                         descTauxNominal, _
                                         descCapAssure, _
                                         nomTxNom_Actu, _
                                         descTxNom_Actu, _
                                         "p")
            End With
        End If
        If nomParam = nomTxMort_Actu Then
            With tbleEncoursPrep1
                reqSegmentationParamSens.addSELECTmoypond(tbleEncoursPrep2.nom, _
                                         tbleEncoursPrep2.nom, _
                                         descTxMortAn, _
                                         descCapAssure, _
                                         nomTxMort_Actu, _
                                         descTxMort_Actu, _
                                         "0.000 %")
            End With
        End If
        AddHandler reqSegmentationParamSens.Invalidated, AddressOf onReqParametreHasBeenInvalidated
        Return True
    End Function
#End Region

#Region "Traitement du moteur de calcul par équilibre tarifaire - Source Source : EntreeModelesTxGar"
    Public ReadOnly Property TraitMoteurMethode1 As IIntegMoteur_MethodeEqTarif Implements IListeTraitementsTxGar.TraitMoteurMethode1
        Get
            If Not ContainsKey(nomTraitMoteurMethode1) Then
                creeTraitMoteurMethode1()
            End If
            'Conversion implicite du type traitement vers le type MoteurMethode1
            Dim result As IIntegMoteur_MethodeEqTarif = Item(nomTraitMoteurMethode1)
            Dim e As New PropertyGetEventArgs(Of IIntegMoteur_MethodeEqTarif)(result, result)
            RaiseEvent TraitMoteurMethode1Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitMoteurMethode1Get As PropertyGetEventHandler(Of IIntegMoteur_MethodeEqTarif)
    ''' <summary>
    ''' Source : EntreeModeleTxGar
    ''' Ajout : Détermination d'une table de travail résultant du traitement en entrée paramétré
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ''' 
    Protected Function creeTraitMoteurMethode1() As Boolean Implements IListeTraitementsTxGar.creeTraitMoteurMethode1
        'A cet endroit, il faudra changer le traitement en entrée s'il s'agit
        'du Moteur 1 version SAS.

        Dim moteurMethode1 As IIntegMoteur_MethodeEqTarif

        If TypeCode = TauxGarantis.TypeCode.VBNET Then
            '''' --- Version du Moteur 1 en production actuellement. Du VB.NET intégral avec liaison des paramètres dans la procédure de calcul
            moteurMethode1 = New Moteur_Methode1(PTIC_Util.nomTraitMoteurMethode1,
                                                      m_ListeParametres,
                                                      TraitEntreeModelesTxGar,
                                                      Me.DataSet,
                                                      m_Referentiel)
        Else
            moteurMethode1 = New IntegMoteur_MethodeEqTarif_VSAS(PTIC_Util.nomTraitMoteurMethode1,
                                                      TraitEntreeModeleTxGar1,
                                                      Me.DataSet,
                                                      m_Referentiel,
                                                      Me.Connection)
        End If

        '''' --- Nouvelle version VB.NET du moteur de calcul du taux garanti par la méthode de l'equilibre tarifaire
        'Dim moteurMethode1 As New IntegMoteur_MethodeEqTarif_V2(PTIC_Util.nomTraitMoteurMethode1,
        '                                          m_ListeParametres,
        '                                          TraitEntreeModeleTxGar1,
        '                                          Me.DataSet,
        '                                          m_Referentiel)

        '''' --- Version SAS du moteur de calcul du taux garanti par la méthode de l'équilibre tarifaire
        Me.Add(nomTraitMoteurMethode1, moteurMethode1)
        Return True
    End Function
#End Region

#Region "Traitement du moteur de calcul par projection des comptes - Source Source : EntreeModeleTxGar"
    Public ReadOnly Property TraitMoteurMethode2 As Moteur_Methode2 Implements IListeTraitementsTxGar.TraitMoteurMethode2
        Get
            If Not ContainsKey(nomTraitMoteurMethode2) Then
                creeTraitMoteurMethode2()
            End If
            Dim result As Moteur_Methode2 = Item(nomTraitMoteurMethode2)
            Dim e As New PropertyGetEventArgs(Of Moteur_Methode2)(result, result)
            RaiseEvent TraitMoteurMethode2Get(Me, e)
            Return e.returnValue
        End Get
    End Property
    Public Event TraitMoteurMethode2Get As PropertyGetEventHandler(Of Moteur_Methode2)
    ''' <summary>
    ''' Source : EntreeModeleTxGar
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Function creeTraitMoteurMethode2() As Boolean Implements IListeTraitementsTxGar.creeTraitMoteurMethode2
        Dim listeParametres As ParametresList = m_ListeParametres
        Dim moteurMethode2 As New Moteur_Methode2(PTIC_Util.nomTraitMoteurMethode2, _
                                                  listeParametres,
                                                  m_Referentiel,
                                                  Me.TraitEntreeModelesTxGar,
                                                  Me.TraitSumCapIni,
                                                  Me.TraitReqNbPretsXassu)
        Me.Add(PTIC_Util.nomTraitMoteurMethode2, moteurMethode2)
        Return True
    End Function
#End Region

#End Region
#Region "Traitement des évènements reçus de l'extérieur"

    Private Sub onTbleMortHChanged(ByVal sender As Object, ByVal e As EventArgs) Implements IListeTraitementsTxGar.onTbleMortHChanged
        Dim nomPhysiqueRelatif As String = ""
        TraitTbleMortH.FichierBDD.NomComplet = csteEmplacementReferentiel & nomPhysiqueRelatif
    End Sub
    Private Sub onTbleMortFChanged(ByVal sender As Object, ByVal e As EventArgs) Implements IListeTraitementsTxGar.onTbleMortFChanged
        Dim nomPhysiqueRelatif As String = ""
        TraitTbleMortF.FichierBDD.NomComplet = csteEmplacementReferentiel & nomPhysiqueRelatif
    End Sub
    Private Sub onGrilleTarifaireChanged(ByVal sender As Object, ByVal e As EventArgs) Implements IListeTraitementsTxGar.onGrilleTarifaireChanged
        Dim nomGrille As String = ""
        TraitGrilleTarifaire.FichierBDD.NomComplet = csteEmplacementReferentiel & nomGrille
    End Sub
    Private Sub onTbleMaintienINCINVM2Changed(ByVal sender As Object, ByVal e As EventArgs) Implements IListeTraitementsTxGar.onTbleMaintienINCINVM2Changed
        Dim nomPhysiqueRelatif As String = ""
        TraitMaintienINCINVM2.FichierBDD.NomComplet = csteEmplacementReferentiel & nomPhysiqueRelatif
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub onReqParametreHasBeenInvalidated(ByVal sender As Object, ByVal notification As Object)
        TraitTbleTravail.invalideAll()
    End Sub

#End Region

    Public ReadOnly Property Connection As PTIC_GestionBDD.IConnection Implements PTIC_GestionBDD.IListeTraitements.Connection
        Get
            Return m_ListeTraitements.Connection
        End Get
    End Property

    Public ReadOnly Property DataSet As System.Data.DataSet Implements PTIC_GestionBDD.IListeTraitements.DataSet
        Get
            Return m_ListeTraitements.DataSet
        End Get
    End Property

#Region "IDictionary (Of String,ITraitement)"
    Public Overloads Sub Add(ByVal item As System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)) Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).Add
        m_ListeTraitements.Add(item.Key, item.Value)
    End Sub
    Public Overloads Sub Add(ByVal key As String, ByVal value As PTIC_GestionBDD.ITraitement) Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).Add
        m_ListeTraitements.Add(key, value)
    End Sub
    Public Overloads Function Remove(ByVal item As System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)) As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).Remove
        Return m_ListeTraitements.Remove(item.Key)
    End Function
    Public Overloads Function Remove(ByVal key As String) As Boolean Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).Remove
        Return m_ListeTraitements.Remove(key)
    End Function

    Public Sub Clear() Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).Clear
        m_ListeTraitements.Clear()
    End Sub
    Public Function Contains(ByVal item As System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)) As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).Contains
        Return m_ListeTraitements.Contains(item)
    End Function
    Public Function ContainsKey(ByVal key As String) As Boolean Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).ContainsKey
        Return m_ListeTraitements.ContainsKey(key)
    End Function
    Public Sub CopyTo(ByVal array() As System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement), ByVal arrayIndex As Integer) Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).CopyTo
        m_ListeTraitements.CopyTo(array, arrayIndex)
    End Sub
    Public ReadOnly Property Count As Integer Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).Count
        Get
            Return m_ListeTraitements.Count
        End Get
    End Property
    Public ReadOnly Property IsReadOnly As Boolean Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).IsReadOnly
        Get
            Return m_ListeTraitements.IsReadOnly
        End Get
    End Property

    Default Public Property Item(ByVal key As String) As PTIC_GestionBDD.ITraitement Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).Item
        Get
            Return m_ListeTraitements.Item(key)
        End Get
        Set(ByVal value As PTIC_GestionBDD.ITraitement)
            m_ListeTraitements.Item(key) = value
        End Set
    End Property

    Public ReadOnly Property Keys As System.Collections.Generic.ICollection(Of String) Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).Keys
        Get
            Return m_ListeTraitements.Keys
        End Get
    End Property
    Public Function TryGetValue(ByVal key As String, ByRef value As PTIC_GestionBDD.ITraitement) As Boolean Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).TryGetValue
        Return m_ListeTraitements.TryGetValue(key, value)
    End Function
    Public ReadOnly Property Values As System.Collections.Generic.ICollection(Of PTIC_GestionBDD.ITraitement) Implements System.Collections.Generic.IDictionary(Of String, PTIC_GestionBDD.ITraitement).Values
        Get
            Return m_ListeTraitements.Values
        End Get
    End Property
    Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)) Implements System.Collections.Generic.IEnumerable(Of System.Collections.Generic.KeyValuePair(Of String, PTIC_GestionBDD.ITraitement)).GetEnumerator
        Return m_ListeTraitements.GetEnumerator
    End Function
    Public Function GetEnumeratorIEnumerable() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
        Return m_ListeTraitements.GetEnumerator
    End Function
#End Region

End Class